-- 2022-7-28

---[[ 遍历表
   -- 我们可以使用pairs迭代器遍历表中的键值对
   t = {10,print,x = 10,k = "hi",100,[5] =5}
   for k, v in pairs(t) do
    print(k,v)
   end
   -- 受限于表在Lua语言中的底层实现机制，遍历过程中元素的出现顺序可能是随机的，相同的程序在每次运行时也可能产生不同的顺序
   -- 唯一可以确定的是，在遍历的过程中每个元素会且之后出现一次
   -- 对于列表而言可以使用ipairs迭代器,只会输出数据中的列表，就算夹杂了其他的东西
   for k, v in ipairs(t) do
    print(k,v)
   end
   -- 此时Lua会确保遍历是按照顺序进行的
   -- 也可以使用for循环遍历
--]]

---[[ 安全访问
   -- 考虑如下情形
   -- zip = company and company.director and company.director.address and company.director.address.zipcode
   -- 这种写法太长，而且十分低效，该写法在一次成功的访问中对表访问进行了6次而非3次访问
   -- 对于这种情形，例如C#提供了一种安全访问操作符?. 当结果为nil返回nil 不会产生异常，可以将上述改写为
   -- zip = company?.director?.address?.zipcode
   -- Lua语言并没有提供这种安全访问操作符，并且认为不应该提供这种操作符
   -- 不过我们可以模拟安全访问操作符
   -- zip = (((company or {}).directory or {}).address or {}).zipcode
   -- 我们还可以写的更短，例如将{}用 E代替 其中E = {}
   -- zip = (((company or E).directory or E).address or E).zipcode
--]]